package andev.aandroidlib.activity;

import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Point;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;

public class AActivity extends Activity {
    private long mExitTimeMillis;

    /**
     * 2015年7月15日
     *
     * @param cls 要打开的Activity的Class
     * @see #goActivity(Class, boolean)，默认true关闭自己
     */
    public void goActivity(Class<?> cls) {
        goActivity(null, cls, true);
    }

    /**
     * 2015年7月15日
     *
     * @param cls         要打开的Activity的Class
     * @param bFinishSelf 是否关闭自己
     * @see #goActivity(Class)
     */
    public void goActivity(Class<?> cls, boolean bFinishSelf) {
        goActivity(null, cls, bFinishSelf);
    }

    /**
     * 2015年7月26日下午4:00:53
     * Angus:TODO
     *
     * @param bundle      要传递的bundle参数
     * @param cls         要打开的Activity的Class
     * @param bFinishSelf 是否关闭自己
     */
    public void goActivity(Bundle bundle, Class<?> cls, boolean bFinishSelf) {
        Intent intent = new Intent(AActivity.this, cls);
        if (bundle != null) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
        if (bFinishSelf) {
            AActivity.this.finish();
        }
    }

    /**
     * 2015年7月21日
     *
     * @param cls 要打开的Activity的Class
     */
    public void goActivityForResult(Class<?> cls) {
        Intent intent = new Intent(AActivity.this, cls);
        startActivityForResult(intent, 0);
    }

    /**
     * @param params 传回的参数
     */
    public void finishSelfWithParams(Bundle params) {
        Intent intent = new Intent();
        if (params != null) {
            intent.putExtras(params);
        }
        setResult(RESULT_OK, intent);
        finish();
    }

    /**
     * 2015年7月24日上午9:26:35
     * Angus: 该方法在setCustomActionBar的情况下无效
     *
     * @param title 返回按钮显示的文字
     */
    public void setFallBack(CharSequence title) {
        getActionBar().setDisplayShowHomeEnabled(false);//关闭Icon

        getActionBar().setDisplayShowTitleEnabled(true);//开启标题
        getActionBar().setDisplayHomeAsUpEnabled(true);//开启返回键

        getActionBar().setTitle(title);
    }

    /* @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
     * Angus
     * 2015年7月13日
     * 重写意图——对ActionBar按钮响应
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        /*"返回"按钮是安卓自带的ID*/
            case android.R.id.home:
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * 2015年7月21日
     *
     * @return 屏幕尺寸
     */
    public Point getScreenSize() {
        Point screenSize = new Point();
        getWindowManager().getDefaultDisplay().getSize(screenSize);
        return screenSize;
    }

    /**
     * 2015年7月21日
     *
     * @param dp
     * @return dp->像素
     */
    public int dpToPixel(float dp) {
        float scale = getResources().getDisplayMetrics().density;
        return Math.round(dp * scale);
    }

    /**
     * 2015年7月24日上午8:53:03
     *
     * @param pixel
     * @return 像素->dp
     * TODO
     */
    public float PixelTodp(float pixel) {
        float scale = getResources().getDisplayMetrics().density;
        return pixel / scale + 0.5f;
    }

    /**
     * 2015年7月24日上午8:59:24
     * Angus:TODO
     *
     * @param resID
     * @return The current custom view.
     */
    public View setCustomActionBar(int resID) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayUseLogoEnabled(false);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setCustomView(resID);
        return actionBar.getCustomView();
    }

    /**
     * @param bExitProgram true关闭jvm,false只结束activity
     */
    public void doublePressExit(boolean bExitProgram) {
        int duration = 2000;
        Toast toast = Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT);
        if (System.currentTimeMillis() - mExitTimeMillis > duration) {
            toast.show();
            mExitTimeMillis = System.currentTimeMillis();
        } else {
            if (bExitProgram)
                System.exit(0);
            else
                finish();
        }
    }

    /**
     * @param bHide true to open the keyboard,false otherwise
     */
    public void hideKeyboard(boolean bHide) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        View view = getCurrentFocus();
        if (view == null) return;
        if (bHide) {
            if (!inputMethodManager.isActive()) return;
            inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        } else {
            if (inputMethodManager.isActive()) return;
            inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_FORCED);
        }
    }
}
